package com.loong.android;

import android.app.Notification;
import android.app.PendingIntent;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;

import androidx.core.app.NotificationCompat;

/**
 * 通知类
 */
public class LonNotification  extends Notification {
    private final android.app.Notification notification;

    public LonNotification(android.app.Notification notification) {
        this.notification = notification;
    }

    /**
     * 返回操作的android.app.Notification对象
     */
    public android.app.Notification getRaw() {
        return notification;
    }

    /**
     * 取类别，在安卓5.0(api21)及以上版本的系统上才有效。
     */
    public String getCategory() {
        if(Build.VERSION.SDK_INT < 21) return null;
        return notification.category;
    }

    /**
     * 取颜色，在安卓5.0(api21)及以上版本的系统上才有效。
     */
    public int getColor() {
        if(Build.VERSION.SDK_INT < 21) return 0;
        return notification.color;
    }

    /**
     * 取标志位
     */
    public int getFlags() {
        return notification.flags;
    }

    /**
     * 取图标资源id
     */
    public int getIcon() {
        return notification.icon;
    }

    /**
     * 取图标层级
     */
    public int getIconLevel() {
        return notification.iconLevel;
    }

    /**
     * 取可视状态，在安卓5.0(api21)及以上版本的系统上才有效。
     */
    public int getVisibility() {
        if(Build.VERSION.SDK_INT < 21) return 0;
        return notification.visibility;
    }

    /**
     * 取数量
     */
    public int getNumber() {
        return notification.number;
    }

    /**
     * 取优先级
     */
    public int getPriority() {
        return notification.priority;
    }

    /**
     * 取呼吸灯颜色
     */
    public int getLightsColor() {
        return notification.ledARGB;
    }

    /**
     * 取呼吸灯开启时间
     */
    public int getLightsOnMs() {
        return notification.ledOnMS;
    }

    /**
     * 取呼吸灯关闭时间
     */
    public int getLightsOffMs() {
        return notification.ledOffMS;
    }

    /**
     * 取额外数据，在安卓4.4(api19)及以上版本的系统上才有效。
     */
    public Bundle getExtras() {
        if(Build.VERSION.SDK_INT < 19) return null;
        return notification.extras;
    }

    /**
     * 取状态栏显示内容
     */
    public String getTickerText() {
        return notification.tickerText == null ? null : notification.tickerText.toString();
    }

    /**
     * 取设置内容，在安卓8.0(api26)及以上版本的系统上才有效。
     */
    public String getSettingsText() {
        if(Build.VERSION.SDK_INT < 26) return null;
        CharSequence charSequence=notification.getSettingsText();
        return charSequence == null ? null : charSequence.toString();
    }

    /**
     * 取振动器持续时间数组
     */
    public long[] getVibratePattern() {
        return notification.vibrate;
    }

    /**
     * 取内容代办意图
     */
    public PendingIntent getContentIntent() {
        return notification.contentIntent;
    }

    /**
     * 取删除代办意图
     */
    public PendingIntent getDeleteIntent() {
        return notification.deleteIntent;
    }

    /**
     * 取全屏代办意图
     */
    public PendingIntent getFullScreenIntent() {
        return notification.fullScreenIntent;
    }

    /**
     * 取角标图标类型，在安卓8.0(api26)及以上版本的系统上才有效。
     */
    public int getBadgeIconType() {
        if(Build.VERSION.SDK_INT < 26) return 0;
        return notification.getBadgeIconType();
    }

    /**
     * 取通道id，在安卓8.0(api26)及以上版本的系统上才有效。
     */
    public String getChannelId() {
        if(Build.VERSION.SDK_INT < 26) return null;
        return notification.getChannelId();
    }

    /**
     * 取显示的持续时间，在安卓8.0(api26)及以上版本的系统上才有效。
     */
    public long getDuration() {
        if(Build.VERSION.SDK_INT < 26) return -1;
        return notification.getTimeoutAfter();
    }

    /**
     * 大图通知样式类，在"通知构造器/NotificationBuilder"类中使用"置样式/setStyle"函数设置通知的样式
     */
    public static class BigPictureStyle extends NotificationCompat.BigPictureStyle {
        /**
         * 设置大图
         * @param bitmap 位图数据
         */
        public BigPictureStyle setImage(Bitmap bitmap) {
            super.bigPicture(bitmap);
            return this;
        }

        /**
         * 设置大图的图标
         *
         * @param bitmap 位图数据
         */
        public BigPictureStyle setIcon(Bitmap bitmap) {
            super.bigLargeIcon(bitmap);
            return this;
        }

        /**
         * 设置标题
         *
         * @param title 标题内容
         */
        public BigPictureStyle setTitle(String title) {
            super.setBigContentTitle(title);
            return this;
        }

        /**
         * 设置摘要
         *
         * @param text 文本内容
         */
        public BigPictureStyle setSummaryText(String text) {
            super.setSummaryText(text);
            return this;
        }
    }

    /**
     * 长文本通知样式，在"通知构造器/NotificationBuilder"类中使用"置样式/setStyle"函数设置通知的样式
     */
    public static class BigTextStyle extends NotificationCompat.BigTextStyle {
        /**
         * 设置标题
         *
         * @param title 标题内容
         */
        public BigTextStyle setTitle(String title) {
            super.setBigContentTitle(title);
            return this;
        }

        /**
         * 设置摘要
         *
         * @param text 文本内容
         */
        public BigTextStyle setSummaryText(String text) {
            super.setSummaryText(text);
            return this;
        }

        /**
         * 设置文本内容
         *
         * @param text 文本内容
         */
        public BigTextStyle setText(String text) {
            super.bigText(text);
            return this;
        }
    }

    /**
     * 收件箱通知样式，在"通知构造器/NotificationBuilder"类中使用"置样式/setStyle"函数设置通知的样式
     */
    public static class InboxStyle extends NotificationCompat.InboxStyle {
        /**
         * 设置标题
         *
         * @param title 标题内容
         */
        public InboxStyle setTitle(String title) {
            super.setBigContentTitle(title);
            return this;
        }

        /**
         * 设置摘要
         *
         * @param text 文本内容
         */
        public InboxStyle setSummaryText(String text) {
            super.setSummaryText(text);
            return this;
        }

        /**
         * 添加行文本内容
         *
         * @param text 文本内容
         */
        public InboxStyle addLine(String text) {
            super.addLine(text);
            return this;
        }
    }

    /**
     * 通知可见性表
     */
    public static class Visibility {
        //私有的，在所有锁屏上显示此通知，但在安全锁屏上隐藏敏感或私人信息
        public final static int PRIVATE = 0;
        //公开的，在所有锁屏上完整显示此通知
        public final static int PUBLIC = 1;
        //隐秘的，不要在安全锁屏上显示此通知
        public final static int SECRET = -1;
    }

    /**
     * 通知的重要性表
     */
    public static class Importance {
        //未指定
        public final static int UNSPECIFIED = -1000;
        //无
        public final static int NONE = 0;
        //最小级别（没有通知声音也不会出现在状态栏上)
        public final static int MIN = 1;
        //低级别（没有通知声音但通知栏有通知）
        public final static int LOW = 2;
        //默认级别（发出通知声音并且通知栏有通知）
        public final static int DEFAULT = 3;
        //高级别（发出通知声音并显示为提示通知）
        public final static int HIGH = 4;
        //最大级别（发出通知声音并显示为提示通知）
        public final static int MAX = 5;
    }

    /**
     * 通知优先级表
     */
    public static class Priority {
        //默认级别（发出通知声音并且通知栏有通知）
        public final static int DEFAULT = android.app.Notification.PRIORITY_DEFAULT;
        //最小级别（没有通知声音也不会出现在状态栏上)
        public final static int MIN = android.app.Notification.PRIORITY_MIN;
        //低级别（没有通知声音但通知栏有通知）
        public final static int LOW = android.app.Notification.PRIORITY_LOW;
        //高级别（发出通知声音并显示为提示通知）
        public final static int HIGH = android.app.Notification.PRIORITY_HIGH;
        //最大级别（发出通知声音并显示为提示通知）
        public final static int MAX = android.app.Notification.PRIORITY_MAX;
    }
}
